package com.yc.collections.stackDemo;

import java.util.Stack;

/**
 * Title: 使用数组实现栈<br>
 * Description: <br>
 * Author:陈圆(chenyuan@bosssoft.com.cn) <br>
 * Date:2020/8/19
 */
public class MyStack {
    /**
     * 栈的实现
     * 新增 压栈 push
     * 取出栈顶元素 出栈 pop
     * 获取栈顶元素 get
     * 遍历栈
     * 我们需要空间小的集合 位图数组  bit[]
     */
    public static void main(String[] args) {

        

    }


    class ArrStack {
        private int[] arrStack; // 栈的主体信息
        private int length; // 栈的长度
        private int top = -1; // 表示栈顶元素 会随着压栈变化

        public ArrStack(int length){
            if (length < 0) {
                System.out.println("length 不正确");
                return ;
            }
            this.length = length;
            arrStack = new int[this.length];
        }

        // 判断栈空
        public boolean isEmpty() {
            return top == -1;
        }
        // 判断栈满
        public boolean isFull() {
            return top == length - 1;
        }

        // 入栈
        public void push(int a) {
            if (isFull()) {
                System.out.println("栈满");
                return ;
            }
            top ++;
            arrStack[top] = a;
        }
        // 出栈
        public int pop() {
            if (isEmpty()) {
                System.out.println("栈空");
            }
            int val = arrStack[top];
            top --;
            return val;
        }

        // 获取栈顶元素
        public int getTop() {
            return arrStack[top];
        }

        // 遍历栈
        public void list() {
            if (isEmpty()) {
                System.out.println("栈空");
            }
            // 循环时，需要从栈顶开始pop出来
            for (int i=top; i >= 0; i--) {
                System.out.printf("stack[%d]=%d\n" , i, arrStack[i]);
            }
        }
    }
}
